home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / DJLSR111.ZIP / libsrc / c / dos / int86x.s < prev    next >
Text File  |  1993-07-26  |  1KB  |  103 lines

  1.     .data
  2. ds:
  3.     .word    0
  4. es:
  5.     .word    0
  6. fs:
  7.     .word    0
  8. gs:
  9.     .word    0
  10.  
  11. int86:
  12.     .byte    0x2e
  13.     push    ds
  14.     pop    %ds
  15.     .byte    0x2e
  16.     push    es
  17.     pop    %es
  18.     .byte    0x2e
  19.     push    fs
  20.     pop    %fs
  21.     .byte    0x2e
  22.     push    gs
  23.     pop    %gs
  24.  
  25.     .byte    0xcd
  26. int86_vec:
  27.     .byte    0x03
  28.     ret
  29.  
  30.     .text
  31.     .globl    _int86x
  32. _int86x:
  33.     movl    16(%esp), %eax
  34.  
  35.     movw    2(%eax), %cx
  36.     movw    %cx, ds
  37.     movw    4(%eax), %cx
  38.     movw    %cx, es
  39.     movw    6(%eax), %cx
  40.     movw    %cx, fs
  41.     movw    8(%eax), %cx
  42.     movw    %cx, gs
  43.  
  44.     jmp    int86_common
  45.  
  46.     .globl    _int86
  47. _int86:
  48.     movw    %ds, %ax
  49.     movw    %ax, ds
  50.     movw    %ax, es
  51.     movw    %ax, fs
  52.     movw    %ax, gs
  53.     jmp    int86_common
  54.  
  55. int86_common:
  56.     pushl    %ebp
  57.     movl    %esp,%ebp
  58.     pushl    %ebx
  59.     pushl    %esi
  60.     pushl    %edi
  61.     pushf
  62.  
  63.     movl    8(%ebp),%eax
  64.     movb    %al,int86_vec
  65.  
  66.     movl    12(%ebp),%eax
  67.     movl    4(%eax),%ebx
  68.     movl    8(%eax),%ecx
  69.     movl    12(%eax),%edx
  70.     movl    16(%eax),%esi
  71.     movl    20(%eax),%edi
  72.     movl    (%eax),%eax
  73.  
  74.     push    %ds
  75.     push    %es
  76.     call    int86
  77.     pop    %es
  78.     pop    %ds
  79.  
  80.     pushf
  81.     pushl    %eax
  82.     movl    %esp,%ebp
  83.     addl    $24,%ebp
  84.     movl    16(%ebp),%eax
  85.     popl    (%eax)
  86.     movl    %ebx,4(%eax)
  87.     movl    %ecx,8(%eax)
  88.     movl    %edx,12(%eax)
  89.     movl    %esi,16(%eax)
  90.     movl    %edi,20(%eax)
  91.     popl    %ebx    /* flags */
  92.     movl    %ebx,28(%eax)
  93.     andl    $1,%ebx
  94.     movl    %ebx,24(%eax)
  95.     movl    (%eax),%eax
  96.  
  97.     popf
  98.     popl    %edi
  99.     popl    %esi
  100.     popl    %ebx
  101.     popl    %ebp
  102.     ret
  103.